import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 周斌
 * Date: 2024-03-13
 * Time: 15:17
 */
public class ParenMatch {
    Stack<Character> stack = new Stack<>();
    public boolean isValid(String str) {
        //1.遍历这个数组
        for (int i = 0; i < str.length(); i++) {
            //2.判断是左括号还是右括号
            char ch = str.charAt(i);
            //2.1左括号
            if(ch == '(' || ch == '[' || ch == '{' ) {
                //压栈
                stack.push(ch);
            }
            //2.2右括号 看栈中是否为空，为空直接返回flase 不为空判断左右括号是否匹配。
             else {
                //2.2.1栈中不为空
                if(!stack.empty()) {
                    char ch1 = stack.peek();//ch1是左括号。
                    //判断括号是否匹配
                    if(ch == ')' && ch1 == '(' || ch == ']' && ch1 == '[' || ch == '}' && ch1 == '{') {
                        stack.pop();
                    }
                    else {
                        return false;
                    }
                }
                //2.2.2栈中为空
                else {
                    return false;
                }
            }
        }
        //当数组遍历完之后，判断栈中是否空。
        return stack.empty();
    }

    public static void main(String[] args) {
        String str = "{()}";
        ParenMatch parenMatch = new ParenMatch();
        System.out.println(parenMatch.isValid(str));
    }
}
